package com.itcam.maker.generator;

import java.io.*;

/**
 * 该类用于生成JAR包，提供了清理并打包Maven项目的功能。
 */
public class JarGenerator {

    /**
     * 清理之前的构建并打包Maven项目。
     *
     * @param projectDir 项目目录路径
     * @throws IOException          如果执行命令时发生I/O错误
     * @throws InterruptedException 如果执行命令时线程被中断
     */
    public static void doGenerate(String projectDir) throws IOException, InterruptedException {
        // 清理之前的构建并打包
        // 注意不同操作系统，执行的命令不同
        String winMavenCommand = "mvn.cmd clean package -DskipTests=true";
        String otherMavenCommand = "mvn clean package -DskipTests=true";
        // 默认使用Windows系统的Maven命令
        String mavenCommand = winMavenCommand;

        // 这里一定要拆分！因为ProcessBuilder构造函数需要字符串数组作为参数
        ProcessBuilder processBuilder = new ProcessBuilder(mavenCommand.split(" "));
        // 设置命令执行的目录为项目目录
        processBuilder.directory(new File(projectDir));

        // 启动进程执行命令
        Process process = processBuilder.start();

        // 读取命令的输出
        InputStream inputStream = process.getInputStream();
        // 使用BufferedReader按行读取输入流
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        String line;
        // 逐行读取命令输出并打印到控制台
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }

        // 等待命令执行完成
        int exitCode = process.waitFor();
        System.out.println("命令执行结束，退出码：" + exitCode);
    }

    /**
     * 程序入口，用于测试doGenerate方法。
     *
     * @param args 命令行参数
     * @throws IOException          如果执行命令时发生I/O错误
     * @throws InterruptedException 如果执行命令时线程被中断
     */
    public static void main(String[] args) throws IOException, InterruptedException {
        // 调用doGenerate方法并传入项目目录
        doGenerate("F:\\projectManagement\\Combane\\new\\iah-backend\\iah-code-maker\\generated\\acm-template-pro-generator");
    }
}
